﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using Concert.Tools;
using Concert.Musique;
using Concert.LastFm;

namespace Concert
{
    public partial class FrmRechByGeo : Form
    {
        public FrmRechByGeo()
        {
            InitializeComponent();
        }

        #region Champs
        Event selectedEvent = new Event();
        private const string MESSAGE_RECHERCHE_EVENT = "Recherche en cours...";
        private const string MESSAGE_SAISIE_LIEU = "Veuillez saisir un lieu (ville, pays...) à rechercher...";
        private const string MESSAGE_LIEU_INCONNU = "Désolé, aucun événement n'a été trouvé pour '#valeur'";
        private const string MESSAGE_CONNEXION_INTERNET = "Désolé, il faut une connexion à Internet pour utiliser l'appli...";

        private string message;

        #endregion

        #region Gestionnaire d'événements

        #region Chargement formulaire
        private void FrmRechByGeo_Load(object sender, EventArgs e)
        {
            //On re-teste la connexion à Internet
            bool connexionOk = false;
            if (connexionOk == NetManager.isConnected())
            {
                message = MESSAGE_CONNEXION_INTERNET;
                lblMessage.Text = message;
                erp.SetError(txtLieuRecherche, message);

                //On empêche l'utilisateur d'envoyer des informations
                btnRecherche.Enabled = false;
            }
            else
            {
                erp.SetError(txtLieuRecherche, string.Empty);
                lblMessage.Text = string.Empty;
            }

        }
        #endregion

        #region Traitement principal : clic bouton rechercher
        private void btnRecherche_Click(object sender, EventArgs e)
        {
            //Dans le cas ou l'utilisateur n'entre aucune donnée
            if (txtLieuRecherche.Text == string.Empty)
            {
                //On affiche un message d'erreur
                erp.SetError(txtLieuRecherche, MESSAGE_SAISIE_LIEU);
            }
            else
            {
                Cursor.Current = Cursors.WaitCursor;
                lblMessage.Text = MESSAGE_RECHERCHE_EVENT;
                lblMessage.Refresh();

                rechercherEventsByGeo();

                txtLieuRecherche.Clear();
            }
        }      
        #endregion

        #region Autre
        private void lstEvents_SelectedIndexChanged(object sender, EventArgs e)
        {
            selectedEvent = (Event)lstEvents.SelectedItem;

            //Affichage des informations concernant l'event
            lblNom.Text = selectedEvent.titre;
        }

        private void btnMoreInfo_Click(object sender, EventArgs e)
        {

            EventDetails formulaire = new EventDetails(selectedEvent);
            formulaire.Show();
        }
        #endregion     

        #endregion

        #region Méthodes
        private void rechercherEventsByGeo()
        {
            List<Event> lesEvents = new List<Event>();
            string recherche = txtLieuRecherche.Text;
            lesEvents = LastFmApi.getEventsByGeo(recherche);

            //Dans le cas ou aucun événement n'est trouvé pour le lieu recherché
            if (lesEvents.Count == 0)
            {
                //On affiche un message d'erreur
                message = MESSAGE_LIEU_INCONNU.Replace("#valeur#", recherche);
                lblMessage.Text = message;
                erp.SetError(txtLieuRecherche, message);
                //MessageBox.Show("Désolé, aucun événement n'a été trouvé pour ce lieu...", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                //Si un résultat aboutit, on efface le message
                lblMessage.Text = string.Empty;
                erp.SetError(txtLieuRecherche, string.Empty);

                tabEvents.Visible = true;
                //Puis on affiche les différents événements
                lstEvents.DataSource = lesEvents;
                lstEvents.DisplayMember = "title";
            }
        }
        #endregion

    }
}
